package com.sxj.corejava.code05_方法;

/**
 * @author 石小俊
 * 2024年07月10日 10:38
 */
public class Test01_方法的定义 {
    // 方法可以定义在类中的任意位置

    // 可以定义方法
    // 此处的方法是不能直接运行的
    // 所有程序必须在main方法中进行运行
    // 想要运行对应方法,必须在main方法中进行调用
    public static void test() {
        System.out.println("这是一个方法");
    }

    // main也是一个方法,只是这个方法是Java专门用来运行程序的方法
    public static void main(String[] args) {
        // 这边不能定义方法
        // 调用方法
        // 如果需要调用的方法与main方法在同一个类中
        // 如果是无参方法,可以通过方法名()进行调用
        test();
        // 如果是有参方法,可以通过方法名(参数值)进行调用
        // 调用的方法有几个参数,传递的值就有几个
        // 且每一个值的类型都必须与方法参数的类型一致
        // 此时传的值,相当于为变量赋值
        test02("admin", 18);

        // 如果方法有返回值,可以通过变量类型 变量名 = 方法名(参数列表)将方法的返回值赋值给指定的变量
        int sum = add(1, 2);
        // 上述写法相当于int sum = 3
        System.out.println(sum);

        // 对于存在返回值的方法,也可以直接打印,不对变量进行赋值
        System.out.println(isAdult(20));
        // 上述写法相当于System.out.println("成年");
        test03();

        // 如果需要调用的方法不在当前类中,而是另一个类
        // 可以通过类名.方法名(参数列表)进行调用
        SomeClass.print();
        System.out.println(SomeClass.add(1, 2));
    }

    // 可以定义方法
    // 方法的参数定义相当于变量声明,只是不能赋值
    // 多个参数之间以逗号分割
    // 在声明方法的时候,方法的参数是没有赋值
    // 在调用方法的时候为方法的参数赋值
    public static void test02(String name, int age) {
        System.out.println("您的姓名:" + name);
        System.out.println("您的年龄:" + age);
    }

    // 方法的返回值:当执行方法之后,该方法会返回一个值出来
    // 返回的值的类型与定义方法时声明的类型要一致
    // 如果方法存在返回值,在方法体中逻辑上的最后一行必须通过return 值的方式对方法设置返回值
    // 此时的值必须是对应的声明的返回值类型
    public static int add(int i, int j) {
        return i + j;
    }

    // 如果存在分支,每一个分支的逻辑上的最后一行都要有return 值
    public static String isAdult(int age) {
        if (age < 18) {
            return "未成年";
        } else {
            return "成年";
        }
    }


    public static void test03() {
        for (int i = 1; i <= 10; i++) {
            if (i % 5 == 0) {
                // 在没有返回值的方法中可以通过直接写return表示退出这个方法
                // 当出现return之后,该方法直接结束,不再执行下面的所有代码
                return;
            }
            System.out.println(i);
        }
        System.out.println("不在循环中了");
    }
}
